package cn.han.serializable;

import java.io.*;

//本类用于测试对象的序列化与反序列化
/*序列化：
 * 是指把程序中的java对象ton过序列化流oos输出到磁盘的文件中，相当于数据写出的过程
 * 反序列化：
 * 是指把之前已经板寸在文件中的对象的相关数据，通过反序列化流ois读到内存的程序中
 * 相当于数据读取的过程*/
public class TestSerializable {
    public static void main(String[] args) {
        method1();//本方法用于测试序列化
        method2();//本方法用于测试反序列化
    }

    //序列化方法
    private static void method1() {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(
                    new FileOutputStream("D:\\ready\\1.txt"));
            Student s = new Student("海绵宝宝", 3, "海里", '男');
            oos.writeObject(s);
            System.out.println("恭喜你，序列化成功");
            /*成功后，我们可以在目标文件里看到序列化输出的数据
            * 这个数据是为了底层保存对象和传输使用的，我们看不懂*/
        } catch (IOException e) {
            System.out.println("失败");
            e.printStackTrace();
        } finally {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

    //反序列化方法
    private static void method2() {
        ObjectInputStream ois = null;
        try{
            ois =new ObjectInputStream(new FileInputStream("D:\\ready\\1.txt"));
            Object o = ois.readObject();
            System.out.println(o);
            System.out.println("成功");
        }catch (Exception e){
            System.out.println("失败");
            e.printStackTrace();
        }finally {
            try {
                ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
